package com.itheima.tlias84.utils;

import com.alibaba.fastjson2.JSONObject;
import com.google.gson.JsonObject;
import com.itheima.tlias84.dto.ReportLogDTO;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.JwtParser;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.lang.Builder;
import io.jsonwebtoken.security.Keys;

import java.util.Date;
import java.util.UUID;

/**
 * jwt token 生成与验证（解析）
 */
public class JwtUtil {
    private static final String K ="30cc7ad3-4c1e-49bb-9ae7-830a5b029ea7";
    //生成
    private  JwtUtil() {


    }

    /**
     * 生成token
     * @param username 用户名
     * @param password 密码
     * @param minutes token过期时间，以分钟为单位
     * @return token
     */
    public static String generateToken(String username , String password,int minutes) {
  //  public static String generateToken(ReportLogDTO reportLogDTO, int minutes) {
        //1.构建jwt对象  使用的是建造者模式
        //2.指定header（一般不指定）省略 使用默认的jwt头
        //3.放置payload，以及过期时间
        //4.进行数字签名
        //5.生成token
        Date date = new Date();
        String compact = Jwts.builder().claim("username", username).claim("password", password).
                issuedAt(date).expiration(new Date(date.getTime() + 60000000 * 1000 * minutes))
                .signWith(Keys.hmacShaKeyFor(K.getBytes()), Jwts.SIG.HS256).compact();
        return compact;

    }

    /**
     * 验证token
     * @param token 生成的令牌
     * @return  payload中的用户信息
     */
    public static JSONObject verifyToken(String token) {
       //1.构建解析对象
        //2.指定数字签名
        //3.指定被签名后的token
        JwtParser build = Jwts.parser().verifyWith(Keys.hmacShaKeyFor(K.getBytes())).build();
        Claims payload = build.parseSignedClaims(token).getPayload();
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("username",payload.get("username"));
        jsonObject.put("password",payload.get("password"));
        return jsonObject;
    }
}
